Amazon QuickSightで分析のシートを別の分析にコピーする

Amazon QuickSightで分析のシートを別の分析にコピーする

コード管理機能を使ってシートをコピーします
Clock Icon2024.07.09

データアナリティクス事業本部インテグレーション部機械学習チーム・新納(にいの)です。

Amazon QuickSightではアセット定義を取得し、API経由でCreate/Updateできる機能があります。

Amazon QuickSight でダッシュボード、分析、テンプレートをコード管理出来るようになりました #reInvent | DevelopersIO

この機能を使って、分析のシートを別の分析にコピーしてみました。

やりたいこと

以下の条件で検証しました。

  • 分析(analysis1)のシート2を別の分析(analysis2)へコピー
  • analysis1とanalysis2のデータセットはそれぞれ別のものを使用している
  • API操作はCloudShellから実施

20240708_qs_overview

全体の流れは以下の通り。

  1. コピー元(analysis1)・コピー先(analysis2)の両方の分析の定義を取得
  2. コピーしたいシートの定義をコピー先(analysis2)の定義に貼り付け、アカウント情報などのその他必要情報を編集
  3. 編集した定義を使ってupdate-analysisコマンドでコピー先(analysis2)を更新

定義を取得する

まずはコピー元・コピー先の定義を取得します。分析のIDが必要となるのでQuickSightのコンソールから「QuickSightを管理」にアクセスし、アセット管理画面から確認します。

20240708_qs_movesheet_analysisid

定義の取得にはdescribe-analysis-definitionコマンドを使います。AWSアカウントIDと分析のIDを指定し、jsonファイルにして出力内容を保存します。コピー元・コピー先の分析の両方の定義をこのコマンドで取得しておきましょう。

aws quicksight describe-analysis-definition      \
        --aws-account-id <AWSアカウントID>              \
        --analysis-id <分析ID> \
> ./<任意のファイル名>.json

今回はAWSマネジメントコンソールからCloudShellを使ってコマンド実行しています。上記のコマンドで保存されたJSONファイルは、アクション→ファイルをダウンロードでファイル名を指定することでダウンロード可能です。

20240708_qs_movesheet_cloudshell

定義を編集する

シートの定義をコピー

コピーしたいシートの定義情報をコピー元の分析定義から抜き出し、コピー先の定義ファイルへ貼り付けます。一部抜粋とはなりますが、分析の定義情報は以下のようになっています。シートの定義はSheetsキーの中に定義されています。このJSONファイルはなかなか長いので目的部分を見つけるのは一苦労ですが、対象となるシート2のSheetId,Name,Visuals,Layouts,ContentTypeの要素をコピーできれば十分です。

{
    "Status": 200,
    "AnalysisId": "9b6a4721-41bc-410b-b77e-21cc2497e606",
    "Name": "analysis1",
    "ResourceStatus": "CREATION_SUCCESSFUL",
    "Definition": {
        "DataSetIdentifierDeclarations": [
            {
                "Identifier": "dataset1",
                "DataSetArn": "<データセットのARN>"
            }
        ],
        "Sheets": [
            {
                "SheetId": "ffe1e897-4b09-4c18-a38f-796066d94d16",
                "Name": "シート 1",
                "Visuals": [
                    ...(中略)...
                ],
                "Layouts": [
                    ...(中略)...
                ],
                "ContentType": "INTERACTIVE"
            },
            {
                "SheetId": "200a02b7-bcfb-4af3-a082-cfed1a7b7ac1",
                "Name": "シート2",
                "Visuals": [
                    ...(中略)...
                ],
                "Layouts": [
                    ...(中略)...
                ],
                "ContentType": "INTERACTIVE"
            }
         :
         :
         : 

コピーしたシート定義をコピー先の分析定義のSheetsキーの要素の中にに貼り付けます。シートの要素を区切るカンマをお忘れなく。

20240708_qs_movesheet_sheetcopied

データセット定義を追加

今回はコピー元の分析で使っているデータセットとコピー先で使っているデータセットが異なります。この場合は、データセットの定義部分に追加する必要があります。QuickSightのコンソール画面からデータセットを手動で追加するのと同じイメージです。コピー元分析とコピー先分析で同じデータセットを使用している場合はこの手順は必要ありません。

データセット定義はDataSetIdentifierDeclarations要素の中にあり、データセット名のIdentifierとデータセットARNのDataSetArnから構成されています。。今回はこの中にdataset1を追加しました。

20240708_qs_movesheet_dataset_add

分析情報の編集

describe-analysis-definitionコマンドで定義情報を取得すると、定義をエクスポートした際のステータスやリクエストIDなどの情報が付与されています。このままでは後述するupdate-analysisコマンドで分析を更新するときのインプットとして利用できません。

    "Status": 200,
     ...(中略)...
    "ResourceStatus": "CREATION_SUCCESSFUL",
     ...(中略)...
    "RequestId": "cd17f332-6780-4674-a0ec-938273681d01"

上記のStatusResourceStatusRequestIdを削除し、AwsAccountIdを追加しましょう。

20240708_qs_movesheet_add_awsaccountid

分析を更新する

ここまで準備ができたらあとは分析を更新するだけです。前項で編集したjson形式の定義ファイルを指定してupdate-analysisコマンドを実行します。

今回はCloudShellを使ってコマンド実行をするため、アクションから「ファイルのアップロード」を選択し、定義ファイルをカレントディレクトリに配置します。

20240708_qs_movesheet_cloudshell_upload

lsコマンドでファイルの存在を確認できました。

20240708_qs_movesheet_cloudshell-ls

--cli-input-jsonに定義ファイルを指定し、updateコマンドを実行します。

aws quicksight update-analysis --cli-input-json file://./<定義ファイル名>

実行するとリクエストに対するレスポンスが返ってきます。

20240708_qs_movesheet_update-analysis

コピー先の分析をコンソール上から見てみると、シートが追加されていることが確認できました。

20240708_qs_movesheet_result1

データセットも無事に追加されていることが確認できます。

20240708_qs_movesheet_result2

最後に

コードベースでシートを別の分析にコピーする方法をご紹介しました。生のJSONファイルを編集する必要があるのが難点ではありますが、特に手動での再作成に手間がかかる複雑な分析をそのままコピーできるのはうれしいポイントです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.